package mathybxb

import (
	"fmt"
	"math/rand"
)

/**
 * @ProjectName: go-learn-demo
 * @PackageName: _3_math
 * @Description:
 * @Author: hy.bai
 * @Date: 2025-07-24 17:49
 */
func TestMath() {
	var abc = 10 % 3
	fmt.Printf("%T, %v\n", abc, abc)
	fmt.Printf("10+3=%d\n", 10+3)
	fmt.Printf("10-3=%d\n", 10-3)
	fmt.Printf("10*3=%d\n", 10*3)
	// 除法注意：如果运算的数都是整数，那么除后，去掉小数部分，保留整数部分
	fmt.Printf("10/3=%d\n", 10/3)
	fmt.Printf("10.0/3=%d\n", 10.0/3)
	// 取余注意 余数 = 被除数 -（被除数/除数）* 除数
	fmt.Printf("10%%3=%d\n", 10%3)     // %%:表示输出%本体
	fmt.Printf("-10%%3=%d\n", -10%3)   // %%:表示输出%本体,结果：-1
	fmt.Printf("10%%-3=%d\n", 10%-3)   // %%:表示输出%本体,结果：1
	fmt.Printf("-10%%-3=%d\n", -10%-3) // %%:表示输出%本体,结果：-1
}
func TestIncrement() {
	var i = 1
	i++
	fmt.Println(i) // 打印结果是2
	i--
	fmt.Println(i) // 打印结果是1
}

func TestRelationalOperations() {
	var a = 10
	var b = 20
	fmt.Printf("a==b: %t\n", a == b)
	fmt.Printf("a!=b: %t\n", a != b)
	fmt.Printf("a>b: %t\n", a > b)
	fmt.Printf("a>=b: %t\n", a >= b)
	fmt.Printf("a<b: %t\n", a < b)
	fmt.Printf("a<=b: %t\n", a <= b)
}

func TestLogic() {
	// 演示逻辑运算符的使用 &&
	var age int = rand.Intn(100) // 生成100以内的随机数
	if age > 30 && age < 50 {
		fmt.Println("ok1")
	}
	if age > 30 && age < 40 {
		fmt.Println("ok2")
	}
	// 演示逻辑运算符的使用 ||
	if age > 30 || age < 50 {
		fmt.Println("ok3")
	}
	if age > 30 || age < 40 {
		fmt.Println("ok4")
	}
	// 演示逻辑运算符的使用
	if age > 30 {
		fmt.Println("ok5")
	}
	if !(age > 30) { // (age > 30)表示是一个整体
		fmt.Println("ok6")
	}
}

// 定义一个返回bool的函数，同时打印信息表示自己被执行

// 验证逻辑操作
func check(x int) bool {
	fmt.Printf("check(%d)被执行\n", x)
	return x > 0
}

func TestShortCircuit() {
	// 测试场景1：左侧为false，观察右侧是否执行
	fmt.Println("测试1：左侧为false")
	result1 := check(0) && check(1) // 左侧check(0)返回false
	fmt.Printf("结果: %v\n\n", result1)

	// 测试场景2：左侧为true，观察右侧是否执行
	fmt.Println("测试2：左侧为true")
	result2 := check(1) && check(2) // 左侧check(1)返回true
	fmt.Printf("结果: %v\n", result2)
}
